package com.example.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @RestController 是 Spring MVC 提供的注解，用于标记一个类作为 RESTful 控制器，它的方法默认返回 JSON/XML 数据，而不是视图（如 JSP、Thymeleaf）。
 * 组合注解 = @Controller + @ResponseBody
 * @Controller：标识为 Spring MVC 控制器
 * @ResponseBody：方法返回值直接作为 HTTP 响应体（不经过视图解析器）
 * 适用于 REST API，返回 JSON/XML 数据
 * 默认使用 HttpMessageConverter 自动序列化返回值（如 Jackson）
 * <p></p>
 * @RestController 作用于类中所有方法，自动启用 @ResponseBody。
 * 是否使用 Result 包装：
 * 简单场景：直接返回对象。
 * 规范场景：用 Result 统一结构（推荐）。
 * JSON 序列化：Spring Boot 默认支持，无需手动配置（除非需定制）。
 * <p></p>
 * @RequestMapping 是 Spring MVC 的核心注解，用于 映射 HTTP 请求到控制器方法。它可以用于类或方法上，定义 URL 路径、HTTP 方法（GET/POST 等）、请求头等。
 * 主要属性：
 * 属性	            说明	        示例
 * value / path	    请求路径	    @RequestMapping("/users")
 * method	        HTTP 方法	method = RequestMethod.GET
 * params	        请求参数条件	params = "name=abc"
 * headers	        请求头条件	headers = "Content-Type=application/json"
 * consumes	        请求内容类型	consumes = "application/json"
 * produces	        响应内容类型	produces = "application/json"
 * <p></p>
 * @RestController vs @Controller
 * 特性	                    @RestController	        @Controller
 * 返回类型	                直接返回数据（JSON/XML）	返回视图名称（如 return "index"）
 * 是否需要 @ResponseBody	不需要（已内置）	        需要（如果想返回 JSON）
 * 适用场景	                REST API	            传统 MVC（渲染 HTML 页面）
 * <p></p>
 * Spring 提供了更简洁的注解来替代 @RequestMapping(method = ...)：
 * 注解	            等效写法	                            说明
 * @GetMapping      @RequestMapping(method = GET)	    处理 GET 请求
 * @PostMapping     @RequestMapping(method = POST)	    处理 POST 请求
 * @PutMapping      @RequestMapping(method = PUT)	    处理 PUT 请求
 * @DeleteMapping   @RequestMapping(method = DELETE)	处理 DELETE 请求
 * @PatchMapping    @RequestMapping(method = PATCH)	    处理 PATCH 请求
 * <p></p>
 * 类级别 @RequestMapping：定义 基础路径，统一管理 API 分组。
 * 方法级别 @RequestMapping：定义 具体请求路径和 HTTP 方法。
 * 组合使用：让代码更清晰，减少重复路径前缀。
 * 优先使用 @GetMapping/@PostMapping 等简化注解，提高可读性。
 */

/**
 * 前端控制器
 */
@RestController
@RequestMapping("/blog-comments")
public class BlogCommentsController {
}
/**
 * 前端请求体（Request Body）与后端接收的交互方式
 * 前端可以发送 JSON/XML 格式的请求体（Request Body）给后端，后端通过 @RequestBody 注解直接解析为 Java 对象
 * 前端如何发送 JSON/XML 请求体？
 * 前端通过 Content-Type: application/json 或 Content-Type: application/xml 发送结构化数据
 * 后端如何接收 JSON/XML 请求体？
 * Spring Boot 通过 @RequestBody 自动解析请求体，并转换为 Java 对象。
 * 如何确保请求体是 JSON/XML？
 * Spring Boot 默认会根据 Content-Type 自动选择解析方式：
 * Content-Type: application/json → 用 Jackson 解析 JSON
 * Content-Type: application/xml → 用 JAXB/Jackson 解析 XML
 * <p></p>
 * 关键点	            说明
 * 前端发送 JSON/XML	    必须设置 Content-Type: application/json 或 application/xml
 * 后端接收	            使用 @RequestBody 自动解析
 * JSON 默认支持	        Spring Boot 内置 Jackson
 * XML 需要额外依赖	    添加 jackson-dataformat-xml
 * 常见错误	            415 Unsupported Media Type（Content-Type 不对）
 * <p></p>
 * <p></p>
 * @ResponseBody 是 Spring MVC 的关键注解，它的核心作用是 控制 HTTP 响应体的生成方式，但它本身 不直接执行序列化/反序列化，而是委托给 Spring 的 HttpMessageConverter 机制来完成具体的数据转换
 * @ResponseBody 如何实现序列化？
 * @ResponseBody 本身不处理序列化，而是由 Spring 的 HttpMessageConverter 完成具体转换：
 * 默认情况下，Spring Boot 使用 Jackson 库将 Java 对象转为 JSON。
 * 如果配置了 XML 支持（如 jackson-dataformat-xml），也可以返回 XML。
 * <p></p>
 * 注解	            作用	                            底层机制	                            示例
 * @ResponseBody	将方法返回值序列化后写入 HTTP 响应体	HttpMessageConverter（如 Jackson）	return user; → JSON
 * @RequestBody	    将 HTTP 请求体反序列化为 Java 对象	HttpMessageConverter（如 Jackson）	@RequestBody User user
 * @RestController	类中所有方法默认启用 @ResponseBody	同上	无需在每个方法上加注解
 * <p></p>
 * @ResponseBody 不直接执行序列化，而是触发 HttpMessageConverter 处理。
 * 默认使用 JSON（Jackson），无需手动配置。
 * 前后端交互的完整流程：
 * 前端发送 JSON → @RequestBody + HttpMessageConverter → Java 对象。
 * 后端返回 Java 对象 → @ResponseBody + HttpMessageConverter → JSON。
 * <p></p>
 * <p></p>
 * @RequestBody 是默认触发的吗？
 * @RequestBody 必须显式声明，Spring 不会自动解析请求体（Request Body）。它的作用是指定 某个参数应该从 HTTP 请求体（如 JSON/XML）中解析，而不是从 URL 参数、表单数据等获取。
 * 如果没有 @RequestBody，Spring 会尝试从 URL 参数 或 表单数据 中获取 User 对象，而不是 JSON/XML 请求体。
 * 触发条件：
 * 前端发送请求时，Content-Type 必须是 application/json 或 application/xml。
 * Spring 使用 HttpMessageConverter（如 Jackson）自动反序列化。
 * @ResponseBody 都需要在对应的类上添加注解吗？
 * 取决于是否使用 @RestController：
 * 如果类上有 @RestController，则 所有方法默认带 @ResponseBody，无需单独加。
 * 如果类上是 @Controller，则方法需要 手动加 @ResponseBody，否则 Spring 会尝试返回视图（如 JSP/Thymeleaf）。
 * 注解	            是否默认触发	                必须显式声明？	                适用场景
 * @RequestBody	    ❌ 否	                    ✔️ 是	                    从请求体（JSON/XML）解析参数
 * @ResponseBody	在 @RestController 中 ✔️ 是	在 @Controller 中 ❌ 否	    返回值直接写入响应体（不渲染视图）
 */